avatar

CTF-JarvisOJ-Re-[DD-Hello]

Flag 是下一关的邮箱地址(以 DD 开头)。

文件下载hello

将文件导入ida,如下图

进入

```
1
2
3
4

函数,也没有发现什么特别的FLAG数据
# 所以FLAG可能存在别的函数中
# 经过一番查看,在sub_100000CE0()中找到关键代码

int sub_100000CE0()
{
int result; // eax
signed int v1; // [rsp+1Ch] [rbp-14h]
int v2; // [rsp+24h] [rbp-Ch]

v2 = ((unsigned __int64)((char *)start - (char *)sub_100000C90) >> 2) ^ byte_100001040[0];
result = sub_100000DE0();
if ( !(result & 1) )
{
v1 = 0;
while ( v1 < 55 )
{
byte_100001040[v1] -= 2;
byte_100001040[v1] ^= v2;
++v1;
++v2;
}
result = printf("\nFinal output is %s\n", &byte_100001040[1]);
}
return result;
}

1
2
3
4
5
6
7
8
9
10
11
# 其实输出的就是FLAG了
# 下面按照它这个格式通过python写代码
# (char *)start 和 (char *)sub_100000C90就是地址,所以我们要取出地址是多少
# (char *)start = 100000CB0
# (char *)sub_100000C90 = 100000C90


# byte_100001040是一个字符串,在内存中找到它
![](2.png)

# byte_100001040 = 411011111B0A64676A6862686E67686B623D656A6A3D6804050803020255085D61550A5F0D5D6132171D191F1820040212161E542013140000

s = “\x41\x10\x11\x11\x1B\x0A\x64\x67\x6A\x68\x62\x68\x6E\x67\x68\x6B\x62\x3D\x65\x6A\x6A\x3D\x68\x04\x05\x08\x03\x02\x02\x55\x08\x5D\x61\x55\x0A\x5F\x0D\x5D\x61\x32\x17\x1D\x19\x1F\x18\x20\x04\x02\x12\x16\x1E\x54\x20\x13\x14\x00\x00”
v2 = ((0x100000CB0 - 0x100000C90)>>2) ^ 0x41
for i in range(0,55):
print chr((ord(s[i])-2)^ v2)
v2+=1

![](3.png)
# 由于要去除第一位,所以FLAG为下面这个字符串
# DDCTF-5943293119a845e9bbdbde5a369c1f50@didichuxing.com
文章作者: 咲夜南梦
文章链接: http://yoursite.com/2018/12/08/CTF-JarvisOJ-Re-[DD-Hello]/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 咲夜南梦's 博客
打赏
  • 微信
    微信
  • 支付宝
    支付宝

评论